public class Test {
    /**
     * 优先级队列
     * @param args
     *      1.优先级队列
     *      2.优先级队列的模拟实现
     */
    /**
     *优先级队列的模拟实现
     * @param args
     *      1.堆的概念
     *      2.堆的存储方式
     *      3.堆的创建
     *      4.堆的插入与删除
     */
    /**
     * 堆的删除->TestHeap->poll()
     * @param args
     */
    public static void main(String[] args) {
        int[] array = { 27,15,19,18,28,34,65,49,25,37};
        TestHeap testHeap = new TestHeap();
        testHeap.initHeap(array);

        testHeap.createBigHeap();
        System.out.println(testHeap.poll());
    }
    /**
     * 堆的创建
     * @param args
     *      1.向下调整->TestHeap->siftDown
     *      2.堆的创建->TestHeap->createBigHeap
     *      3.堆的时间复杂度->O(N)
     */
    public static void main4(String[] args) {
        //创建大根堆
        int[] array = { 27,15,19,18,28,34,65,49,25,37};
        TestHeap testHeap = new TestHeap();
        testHeap.initHeap(array);

        testHeap.createBigHeap();
        System.out.println();
    }
    public static void main3(String[] args) {
        /**
         * 堆的存储方式:
         *      是完全二叉树,采用层序的顺序存储(即数组存储)
         *      非完全二叉树则不适合使用顺序存储,因为会存在空节点,会导致空间利用率低
         */
    }
    public static void main2(String[] args) {
        /**
         * 堆的概念:将集合K中所有元素按完全二叉树的顺序存储方法存储在一维数组中
         * 并满足所有树根小于左右节点(称为小根堆),所有树根大于左右节点(称为大根堆)
         *
         * 堆的性质
         *      1.堆总是一颗完全二叉树
         *      2.左右节点总是小于/大于根节点
         */
    }
    public static void main1(String[] args) {
        /**
         * 优先级队列
         * @param args
         *      1.概念:返回最高优先级对象,添加新对象的数据结构
         */
    }
}
